import { Entity, Column, Index } from "typeorm";
import { BaseEntity } from "@/common/entities/base.entity";

/**
 * 用户会话实体
 * 用于存储用户会话信息，记录用户从进入网站到离开的完整会话周期
 */
@Entity("user_sessions")
export class UserSessionEntity extends BaseEntity {
  /**
   * 用户ID
   * 会话所属用户的唯一标识，可为空表示未登录用户
   */
  @Column({ type: "varchar", length: 64, nullable: true, comment: "用户ID" })
  @Index("idx_user_id")
  userId: string;

  /**
   * 会话开始时间
   * 用户开始会话的时间，通常是首次访问网站或刷新页面
   */
  @Column({ type: "datetime", comment: "会话开始时间" })
  sessionStart: Date;

  /**
   * 会话结束时间
   * 用户会话结束的时间，可能是关闭浏览器或长时间无操作
   */
  @Column({ type: "datetime", nullable: true, comment: "会话结束时间" })
  sessionEnd: Date;

  /**
   * 会话总时长（秒）
   * 用户会话持续的总时间，从会话开始到结束的秒数
   */
  @Column({ type: "int", nullable: true, comment: "会话总时长（秒）" })
  totalDuration: number;

  /**
   * 页面浏览量
   * 用户在会话期间浏览的页面总数
   */
  @Column({ type: "int", default: 0, comment: "页面浏览量" })
  pageViews: number;

  /**
   * 事件总数
   * 用户在会话期间触发的所有交互事件总数
   */
  @Column({ type: "int", default: 0, comment: "事件总数" })
  eventsCount: number;

  /**
   * 错误总数
   * 用户在会话期间遇到的错误总数
   */
  @Column({ type: "int", default: 0, comment: "错误总数" })
  errorsCount: number;

  /**
   * IP地址
   * 用户的IP地址，用于地理位置分析
   */
  @Column({ type: "varchar", length: 45, nullable: true, comment: "IP地址" })
  ipAddress: string;

  /**
   * 用户代理字符串
   * 完整的User-Agent字符串，包含设备、浏览器、操作系统等详细信息
   */
  @Column({ type: "text", nullable: true, comment: "用户代理字符串" })
  userAgent: string;
}